package it.polimi.traveldream.persistence;

import java.io.Serializable;

import javax.persistence.*;

import java.util.LinkedList;
import java.util.List;


/**
 * The persistent class for the pacchetto_personalizzato database table.
 * 
 */
@Entity
@Table(name="pacchetto_personalizzato")
@NamedQueries({
	@NamedQuery(name="PacchettoPersonalizzato.findAll", query="SELECT p FROM PacchettoPersonalizzato p"),
	@NamedQuery(name="PacchettoPersonalizzato.findByNameUtente", query="SELECT p FROM PacchettoPersonalizzato p WHERE p.utente.email= :utente and p.prenotazione= :prenotazione"),
	@NamedQuery(name="PacchettoPersonalizzato.giftListHotel",query="SELECT p FROM PacchettoPersonalizzato p JOIN p.giftListHotels h WHERE p.utente.email= :utente"),
	@NamedQuery(name="PacchettoPersonalizzato.giftListVolo",query="SELECT p FROM PacchettoPersonalizzato p JOIN p.giftListVolos v WHERE p.utente.email= :utente"),
	@NamedQuery(name="PacchettoPersonalizzato.giftListTour",query="SELECT p FROM PacchettoPersonalizzato p JOIN p.giftListTours t WHERE p.utente.email= :utente")
})
public class PacchettoPersonalizzato implements Serializable {
	private static final long serialVersionUID = 1L;

	public static final String FIND_BY_UTENTE = "PacchettoPersonalizzato.findByNameUtente";
	
	public static final String FIND_ALL = "PacchettoPersonalizzato.findAll";
	public static final String FIND_GIFT_HOTEL = "PacchettoPersonalizzato.giftListHotel";

	public static final String FIND_GIFT_VOLO = "PacchettoPersonalizzato.giftListVolo";
	public static final String FIND_GIFT_TOUR = "PacchettoPersonalizzato.giftListTour";
	
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int IDPacchettoPers;

	private byte prenotazione;

	//bi-directional many-to-one association to Pacchetto
	@ManyToOne
	@JoinColumn(name="IDPacchettoOriginale")
	private Pacchetto pacchetto;

	//bi-directional many-to-one association to PrenotazioneHotel

	@OneToMany(mappedBy="pacchettoPersonalizzato", cascade=CascadeType.ALL)
	private List<PrenotazioneHotel> prenotazioneHotels1= new LinkedList<PrenotazioneHotel>();

	//bi-directional many-to-many association to PrenotazioneHotel
	@ManyToMany(mappedBy="pacchettoPersonalizzatos", cascade=CascadeType.ALL)
	private List<PrenotazioneHotel> prenotazioneHotels2 = new LinkedList<PrenotazioneHotel>();


	//bi-directional many-to-one association to PrenotazioneTour

	@OneToMany(mappedBy="pacchettoPersonalizzato", cascade=CascadeType.ALL)
	private List<PrenotazioneTour> prenotazioneTours1 = new LinkedList<PrenotazioneTour>();

	//bi-directional many-to-many association to PrenotazioneTour
	@ManyToMany(mappedBy="pacchettoPersonalizzatos", cascade=CascadeType.ALL)
	private List<PrenotazioneTour> prenotazioneTours2 = new LinkedList<PrenotazioneTour>();


	//bi-directional many-to-one association to PrenotazioneVolo
	@OneToMany(mappedBy="pacchettoPersonalizzato", cascade=CascadeType.ALL)
	private List<PrenotazioneVolo> prenotazioneVolos1 = new LinkedList<PrenotazioneVolo>();

	//bi-directional many-to-many association to PrenotazioneVolo
	@ManyToMany(mappedBy="pacchettoPersonalizzatos", cascade=CascadeType.ALL)
	private List<PrenotazioneVolo> prenotazioneVolos2 = new LinkedList<PrenotazioneVolo>();

	//bi-directional many-to-one association to GiftListHotel
	@OneToMany(mappedBy="pacchettoPersonalizzato")
	private List<GiftListHotel> giftListHotels= new LinkedList<GiftListHotel>();

	//bi-directional many-to-one association to GiftListTour
	@OneToMany(mappedBy="pacchettoPersonalizzato")
	private List<GiftListTour> giftListTours = new LinkedList<GiftListTour>();

	//bi-directional many-to-one association to GiftListVolo
	@OneToMany(mappedBy="pacchettoPersonalizzato")
	private List<GiftListVolo> giftListVolos= new LinkedList<GiftListVolo>();

	//bi-directional many-to-one association to Utente
	@ManyToOne
	@JoinColumn(name="EmailUtente")
	private Utente utente;

	public PacchettoPersonalizzato() {
	}

	public int getIDPacchettoPers() {
		return this.IDPacchettoPers;
	}

	public void setIDPacchettoPers(int IDPacchettoPers) {
		this.IDPacchettoPers = IDPacchettoPers;
	}

	public byte getPrenotazione() {
		return this.prenotazione;
	}

	public void setPrenotazione(byte prenotazione) {
		this.prenotazione = prenotazione;
	}

	public Pacchetto getPacchetto() {
		return this.pacchetto;
	}

	public void setPacchetto(Pacchetto pacchetto) {
		this.pacchetto = pacchetto;
	}

	public List<PrenotazioneHotel> getPrenotazioneHotels1() {
		return this.prenotazioneHotels1;
	}

	public void setPrenotazioneHotels1(List<PrenotazioneHotel> prenotazioneHotels1) {
		this.prenotazioneHotels1 = prenotazioneHotels1;
	}

	public PrenotazioneHotel addPrenotazioneHotels1(PrenotazioneHotel prenotazioneHotels1) {
		getPrenotazioneHotels1().add(prenotazioneHotels1);
		prenotazioneHotels1.setPacchettoPersonalizzato(this);

		return prenotazioneHotels1;
	}

	public PrenotazioneHotel removePrenotazioneHotels1(PrenotazioneHotel prenotazioneHotels1) {
		getPrenotazioneHotels1().remove(prenotazioneHotels1);
		prenotazioneHotels1.setPacchettoPersonalizzato(null);

		return prenotazioneHotels1;
	}

	public List<PrenotazioneHotel> getPrenotazioneHotels2() {
		return this.prenotazioneHotels2;
	}

	public void setPrenotazioneHotels2(List<PrenotazioneHotel> prenotazioneHotels2) {
		this.prenotazioneHotels2 = prenotazioneHotels2;
	}

	public List<PrenotazioneTour> getPrenotazioneTours1() {
		return this.prenotazioneTours1;
	}

	public void setPrenotazioneTours1(List<PrenotazioneTour> prenotazioneTours1) {
		this.prenotazioneTours1 = prenotazioneTours1;
	}

	public PrenotazioneTour addPrenotazioneTours1(PrenotazioneTour prenotazioneTours1) {
		getPrenotazioneTours1().add(prenotazioneTours1);
		prenotazioneTours1.setPacchettoPersonalizzato(this);

		return prenotazioneTours1;
	}

	public PrenotazioneTour removePrenotazioneTours1(PrenotazioneTour prenotazioneTours1) {
		getPrenotazioneTours1().remove(prenotazioneTours1);
		prenotazioneTours1.setPacchettoPersonalizzato(null);

		return prenotazioneTours1;
	}

	public List<PrenotazioneTour> getPrenotazioneTours2() {
		return this.prenotazioneTours2;
	}

	public void setPrenotazioneTours2(List<PrenotazioneTour> prenotazioneTours2) {
		this.prenotazioneTours2 = prenotazioneTours2;
	}

	public List<PrenotazioneVolo> getPrenotazioneVolos1() {
		return this.prenotazioneVolos1;
	}

	public void setPrenotazioneVolos1(List<PrenotazioneVolo> prenotazioneVolos1) {
		this.prenotazioneVolos1 = prenotazioneVolos1;
	}

	public PrenotazioneVolo addPrenotazioneVolos1(PrenotazioneVolo prenotazioneVolos1) {
		getPrenotazioneVolos1().add(prenotazioneVolos1);
		prenotazioneVolos1.setPacchettoPersonalizzato(this);

		return prenotazioneVolos1;
	}

	public PrenotazioneVolo removePrenotazioneVolos1(PrenotazioneVolo prenotazioneVolos1) {
		getPrenotazioneVolos1().remove(prenotazioneVolos1);
		prenotazioneVolos1.setPacchettoPersonalizzato(null);

		return prenotazioneVolos1;
	}

	public List<PrenotazioneVolo> getPrenotazioneVolos2() {
		return this.prenotazioneVolos2;
	}

	public void setPrenotazioneVolos2(List<PrenotazioneVolo> prenotazioneVolos2) {
		this.prenotazioneVolos2 = prenotazioneVolos2;
	}

	public List<GiftListHotel> getGiftListHotels() {
		return this.giftListHotels;
	}

	public void setGiftListHotels(List<GiftListHotel> giftListHotels) {
		this.giftListHotels = giftListHotels;
	}

	public GiftListHotel addGiftListHotel(GiftListHotel giftListHotel) {
		getGiftListHotels().add(giftListHotel);
		giftListHotel.setPacchettoPersonalizzato(this);

		return giftListHotel;
	}

	public GiftListHotel removeGiftListHotel(GiftListHotel giftListHotel) {
		getGiftListHotels().remove(giftListHotel);
		giftListHotel.setPacchettoPersonalizzato(null);

		return giftListHotel;
	}

	public List<GiftListTour> getGiftListTours() {
		return this.giftListTours;
	}

	public void setGiftListTours(List<GiftListTour> giftListTours) {
		this.giftListTours = giftListTours;
	}

	public GiftListTour addGiftListTour(GiftListTour giftListTour) {
		getGiftListTours().add(giftListTour);
		giftListTour.setPacchettoPersonalizzato(this);

		return giftListTour;
	}

	public GiftListTour removeGiftListTour(GiftListTour giftListTour) {
		getGiftListTours().remove(giftListTour);
		giftListTour.setPacchettoPersonalizzato(null);

		return giftListTour;
	}

	public List<GiftListVolo> getGiftListVolos() {
		return this.giftListVolos;
	}

	public void setGiftListVolos(List<GiftListVolo> giftListVolos) {
		this.giftListVolos = giftListVolos;
	}

	public GiftListVolo addGiftListVolo(GiftListVolo giftListVolo) {
		getGiftListVolos().add(giftListVolo);
		giftListVolo.setPacchettoPersonalizzato(this);

		return giftListVolo;
	}

	public GiftListVolo removeGiftListVolo(GiftListVolo giftListVolo) {
		getGiftListVolos().remove(giftListVolo);
		giftListVolo.setPacchettoPersonalizzato(null);

		return giftListVolo;
	}

	public Utente getUtente() {
		return this.utente;
	}

	public void setUtente(Utente utente) {
		this.utente = utente;
	}

}